Baner
; В начало ; Новости ; Теория ; Ресурсы ; Ссылки ; Форум ; Почта ;
Математика и физика
2D графика

   DirectDraw:
3D графика

   OpenGL:
Rambler's Top100 Rambler's Top100
.h файл:
class CVector
{	
public:
	CVector();
	CVector(float vx, float vy, float vz);
	CVector(const CVector& v);	
	virtual ~CVector();

public:
	float x, y, z;

	inline float Magnitude();
	CVector& Normalize();
	CVector GetNormalized() const;
	CVector	 operator+ (const CVector& v) const;
	CVector& operator+=(const CVector& v);
	CVector  operator- () const;	
	CVector  operator- (const CVector& v) const;
	CVector& operator-=(const CVector& v);
	CVector  operator* (float k) const;
	CVector& operator*=(float k);
	float    operator^ (const CVector& v) const;
	CVector  operator| (const CVector& v) const;
	CVector& operator|=(const CVector& v);
	CVector& operator= (const CVector& v);
	bool     operator==(const CVector& v) const;
	bool     operator!=(const CVector& v) const;
};
.cpp файл:
CVector::CVector(): x(0), y(0), z(0){};
CVector::CVector(float vx, float vy, float vz):
		x(vx), y(vy), z(vz){};
CVector::CVector(const CVector& v): x(v.x), y(v.y), z(v.z){};
CVector::~CVector(){};

inline float CVector::Magnitude()
{
	return (float)sqrt(x*x + y*y +z*z);
}

CVector& CVector::Normalize()
{
	const float k=Magnitude();
	x /= k;
	y /= k;
	z /= k;
	return *this;
}

CVector CVector::GetNormalized() const
{
	return CVector(*this).Normalize();
}

CVector CVector::operator+(const CVector& v) const
{
	return CVector(x+v.x, y+v.y, z+v.z);
}

CVector& CVector::operator+=(const CVector& v)
{
	x += v.x;
	y += v.y;
	z += v.z;
	return *this;
}

CVector CVector::operator-() const
{
	return CVector(-x,-y,-z);
}


CVector CVector::operator-(const CVector& v) const
{
	return CVector(x-v.x, y-v.y, z-v.z);
}

CVector& CVector::operator-=(const CVector& v)
{
	x -= v.x;
	y -= v.y;
	z -= v.z;
	return *this;
}

CVector CVector::operator*(float k) const
{
	return CVector(k*x, k*y, k*z);
}

CVector& CVector::operator*=(float k)
{
	x *= k;
	y *= k;
	z *= k;
	return *this;
}

float CVector::operator^(const CVector& v) const
{
	return (x*v.x + y*v.y + z*v.z);
}

CVector CVector::operator|(const CVector& v) const
{
	return 
	CVector(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x);	
}

CVector& CVector::operator|=(const CVector& v)
{
	x = y*v.z - z*v.y;
	y = z*v.x - x*v.z;
	z = x*v.y - y*v.x;
	return *this;
}

CVector& CVector::operator=(const CVector& v)
{
	x = v.x;
	y = v.y;
	z = v.z;
	return *this;
}

bool CVector::operator==(const CVector& v) const
{
	if (x==v.x && y==v.y && z==v.z)
		return true;
	else
		return false;
}

bool CVector::operator!=(const CVector& v) const
{
	return !(*this==v);
}
Файл со всеми классами геометрических операций можно найти, например, в главе шаблоны для OpenGL.
Используются технологии uCoz